home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / libraries / database_interface.lib.php < prev    next >
PHP Script  |  2005-03-24  |  7KB  |  199 lines

  1. <?php
  2. /* $Id: database_interface.lib.php,v 2.18 2005/03/24 20:57:00 rabus Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. /**
  6.  * Common Option Constants For DBI Functions
  7.  */
  8. // PMA_DBI_try_query()
  9. define('PMA_DBI_QUERY_STORE',       1);  // Force STORE_RESULT method, ignored by classic MySQL.
  10. define('PMA_DBI_QUERY_UNBUFFERED',  2);  // Do not read whole query
  11. // PMA_DBI_get_variable()
  12. define('PMA_DBI_GETVAR_SESSION', 1);
  13. define('PMA_DBI_GETVAR_GLOBAL', 2);
  14.  
  15. /**
  16.  * Including The DBI Plugin
  17.  */
  18. require_once('./libraries/dbi/' . $cfg['Server']['extension'] . '.dbi.lib.php');
  19.  
  20. /**
  21.  * Common Functions
  22.  */
  23. function PMA_DBI_query($query, $link = NULL, $options = 0) {
  24.     $res = PMA_DBI_try_query($query, $link, $options)
  25.         or PMA_mysqlDie(PMA_DBI_getError($link), $query);
  26.     return $res;
  27. }
  28.  
  29. function PMA_DBI_get_dblist($link = NULL) {
  30.     if (empty($link)) {
  31.         if (isset($GLOBALS['userlink'])) {
  32.             $link = $GLOBALS['userlink'];
  33.         } else {
  34.             return FALSE;
  35.         }
  36.     }
  37.     $res = PMA_DBI_try_query('SHOW DATABASES;', $link);
  38.     $dbs_array = array();
  39.     while ($row = PMA_DBI_fetch_row($res)) {
  40.  
  41.        // Before MySQL 4.0.2, SHOW DATABASES could send the
  42.        // whole list, so check if we really have access:
  43.        //if (PMA_MYSQL_CLIENT_API < 40002) {
  44.        // Better check the server version, in case the client API
  45.        // is more recent than the server version
  46.  
  47.        if (PMA_MYSQL_INT_VERSION < 40002) {
  48.            $dblink = @PMA_DBI_select_db($row[0], $link);
  49.            if (!$dblink) {
  50.                continue;
  51.            }
  52.        }
  53.        $dbs_array[] = $row[0];
  54.     }
  55.     PMA_DBI_free_result($res);
  56.     unset($res);
  57.  
  58.     return $dbs_array;
  59. }
  60.  
  61. function PMA_DBI_get_tables($database, $link = NULL) {
  62.     $result       = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($database) . ';', NULL, PMA_DBI_QUERY_STORE);
  63.     $tables       = array();
  64.     while (list($current) = PMA_DBI_fetch_row($result)) {
  65.         $tables[] = $current;
  66.     }
  67.     PMA_DBI_free_result($result);
  68.  
  69.     return $tables;
  70. }
  71.  
  72. function PMA_DBI_get_fields($database, $table, $link = NULL) {
  73.     if (empty($link)) {
  74.         if (isset($GLOBALS['userlink'])) {
  75.             $link = $GLOBALS['userlink'];
  76.         } else {
  77.             return FALSE;
  78.         }
  79.     }
  80.     // here we use a try_query because when coming from 
  81.     // tbl_create + tbl_properties.inc.php, the table does not exist
  82.     $result = PMA_DBI_try_query('SHOW FULL FIELDS FROM ' . PMA_backquote($database) . '.' . PMA_backquote($table), $link);
  83.  
  84.     if (!$result) {
  85.         return FALSE;
  86.     }
  87.  
  88.     $fields = array();
  89.     while ($row = PMA_DBI_fetch_assoc($result)) {
  90.         $fields[] = $row;
  91.     }
  92.  
  93.     return $fields;
  94. }
  95.  
  96. function PMA_DBI_get_variable($var, $type = PMA_DBI_GETVAR_SESSION, $link = NULL) {
  97.     if ($link === NULL) {
  98.         if (isset($GLOBALS['userlink'])) {
  99.             $link = $GLOBALS['userlink'];
  100.         } else {
  101.             return FALSE;
  102.         }
  103.     }
  104.     if (PMA_MYSQL_INT_VERSION < 40002) {
  105.         $type = 0;
  106.     }
  107.     switch ($type) {
  108.         case PMA_DBI_GETVAR_SESSION:
  109.             $modifier = ' SESSION';
  110.             break;
  111.         case PMA_DBI_GETVAR_GLOBAL:
  112.             $modifier = ' GLOBAL';
  113.             break;
  114.         default:
  115.             $modifier = '';
  116.     }
  117.     $res = PMA_DBI_query('SHOW' . $modifier . ' VARIABLES LIKE \'' . $var . '\';', $link);
  118.     $row = PMA_DBI_fetch_row($res);
  119.     PMA_DBI_free_result($res);
  120.     if (empty($row)) {
  121.         return FALSE;
  122.     } else {
  123.         return $row[0] == $var ? $row[1] : FALSE;
  124.     }
  125. }
  126.  
  127. function PMA_DBI_postConnect($link, $is_controluser = FALSE) {
  128.     global $collation_connection, $charset_connection;
  129.     if (!defined('PMA_MYSQL_INT_VERSION')) {
  130.         $result = PMA_DBI_query('SELECT VERSION() AS version', $link, PMA_DBI_QUERY_STORE);
  131.         if ($result != FALSE && @PMA_DBI_num_rows($result) > 0) {
  132.             $row   = PMA_DBI_fetch_row($result);
  133.             $match = explode('.', $row[0]);
  134.             PMA_DBI_free_result($result);
  135.         }
  136.         if (!isset($row)) {
  137.             define('PMA_MYSQL_INT_VERSION', 32332);
  138.             define('PMA_MYSQL_STR_VERSION', '3.23.32');
  139.         } else{
  140.             define('PMA_MYSQL_INT_VERSION', (int)sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2])));
  141.             define('PMA_MYSQL_STR_VERSION', $row[0]);
  142.             unset($result, $row, $match);
  143.         }
  144.     }
  145.  
  146.     if (PMA_MYSQL_INT_VERSION >= 40100) {
  147.  
  148.         // If $lang is defined and we are on MySQL >= 4.1.x,
  149.         // we auto-switch the lang to its UTF-8 version (if it exists)
  150.         if (!empty($GLOBALS['lang']) && (substr($GLOBALS['lang'], -5) != 'utf-8')) {
  151.             $lang_utf_8_version = substr($GLOBALS['lang'], 0, strpos($GLOBALS['lang'], '-')) . '-utf-8';
  152.             if (!empty($GLOBALS['available_languages'][$lang_utf_8_version])) {
  153.                 $GLOBALS['lang'] = $lang_utf_8_version;
  154.                 $GLOBALS['charset'] = $charset = 'utf-8';
  155.             }
  156.         }
  157.  
  158.         // and we remove the non-UTF-8 choices to avoid confusion
  159.         if (!defined('PMA_REMOVED_NON_UTF_8')) {
  160.             $tmp_available_languages        = $GLOBALS['available_languages']; 
  161.             $GLOBALS['available_languages'] = array();
  162.             foreach ($tmp_available_languages AS $tmp_lang => $tmp_lang_data) {
  163.                 if (substr($tmp_lang, -5) == 'utf-8') {
  164.                     $GLOBALS['available_languages'][$tmp_lang] = $tmp_lang_data;
  165.                 }
  166.             } // end foreach
  167.             unset($tmp_lang, $tmp_lang_data, $tmp_available_languages);
  168.             define('PMA_REMOVED_NON_UTF_8',1);
  169.         }
  170.  
  171.         $mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']];
  172.         if ($is_controluser || empty($collation_connection) || (strpos($collation_connection, '_') ? substr($collation_connection, 0, strpos($collation_connection, '_')) : $collation_connection) == $mysql_charset) {
  173.             PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE);
  174.         } else {
  175.             PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE);
  176.         }
  177.         if (!empty($collation_connection)) {
  178.             PMA_DBI_query('SET collation_connection = \'' . $collation_connection . '\';', $link, PMA_DBI_QUERY_STORE);
  179.         }
  180.         if (!$is_controluser) {
  181.             $collation_connection = PMA_DBI_get_variable('collation_connection',     PMA_DBI_GETVAR_SESSION, $link);
  182.             $charset_connection   = PMA_DBI_get_variable('character_set_connection', PMA_DBI_GETVAR_SESSION, $link);
  183.         }
  184.  
  185.         // Add some field types to the list
  186.         // (we pass twice here; feel free to code something better :)
  187.         if (!defined('PMA_ADDED_FIELD_TYPES')) {
  188.             $GLOBALS['cfg']['ColumnTypes'][] = 'BINARY';
  189.             $GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY';
  190.             define('PMA_ADDED_FIELD_TYPES',1);
  191.         }
  192.  
  193.     } else {
  194.         require_once('./libraries/charset_conversion.lib.php');
  195.     }
  196. }
  197.  
  198. ?>
  199.